package com.jinwei.qunguanjia.system.service;

import com.jinwei.qunguanjia.common.core.page.PageDataInfo;
import com.jinwei.qunguanjia.system.dto.SysInitDTO;
import com.jinwei.qunguanjia.system.dto.SysUserDTO;

import java.util.List;

/**
 * 系统用户 服务层
 * @author yuanzs
 */
public interface SysUserService {
    /**
     * 保存接口
     * @param sysUserDTO 实体对象
     */
    void save(SysUserDTO sysUserDTO);

    /**
     * 删除接口
     * @param id 主键
     */
    void remove(String id);

    /**
     *  根据主键id修改接口
     * @param sysUserDTO 实体对象
     */
    void update(SysUserDTO sysUserDTO);

    /**
     *  根据id获取单条详细
     * @param id 主键
     * @return SysUserDTO对象
     */
    SysUserDTO get(String id);

    /**
     *  根据id获取单条详细
     * @param sysUserDTO 对象
     * @return SysUserDTO对象
     */
    SysUserDTO get(SysUserDTO sysUserDTO) throws IllegalAccessException;

    /**
     *  根据查询条件获取总数
     * @param sysUserDTO 对象条件
     * @return 总数
     */
    Long count(SysUserDTO sysUserDTO) throws IllegalAccessException;

    /**
     *  根据查询条件获取列表
     * @param sysUserDTO 实体对象
     * @return list结果
     */
    List<SysUserDTO> list(SysUserDTO sysUserDTO) throws IllegalAccessException;
    /**
     *  根据查询条件获取分页列表
     * @param sysUserDTO 实体对象
     * @return 分页结果
     */
    PageDataInfo<SysUserDTO> listPage(SysUserDTO sysUserDTO);
    /**
     * 根据条件分页查询已分配用户角色列表
     *
     * @param sysUserDTO 用户信息
     * @return 用户信息集合信息
     */
    PageDataInfo<SysUserDTO> listAllocated(SysUserDTO sysUserDTO);

    /**
     * 根据条件分页查询未分配用户角色列表
     *
     * @param sysUserDTO 用户信息
     * @return 用户信息集合信息
     */
    PageDataInfo<SysUserDTO> listUnallocated(SysUserDTO sysUserDTO);
    /**
     * 通过用户名查询用户
     *
     * @param userName 用户名
     * @return 用户对象信息
     */
    SysUserDTO getUserByUserName(String userName);

    /**
     * 通过用户ID查询用户
     *
     * @param id 用户ID
     * @return 用户对象信息
     */
    SysUserDTO getUserById(String id);

    /**
     * 校验用户名称是否唯一
     *
     * @param userName 用户名称
     * @return 结果
     */
    String checkUserNameUnique(String userName) throws IllegalAccessException;

    /**
     * 校验手机号码是否唯一
     *
     * @param sysUserDTO 用户信息
     * @return 结果
     */
    String checkPhoneUnique(SysUserDTO sysUserDTO) throws IllegalAccessException;

    /**
     * 校验email是否唯一
     *
     * @param sysUserDTO 用户信息
     * @return 结果
     */
    String checkEmailUnique(SysUserDTO sysUserDTO) throws IllegalAccessException;

    /**
     * 校验用户是否允许操作
     *
     * @param userId 用户id
     */
    void checkUserAllowed(String userId);

    /**
     * 校验用户是否有数据权限
     *
     * @param userId 用户id
     */
    void checkUserDataScope(String userId);

    /**
     * 用户授权角色
     *
     * @param userId 用户ID
     * @param roleIds 角色组
     */
    void saveUserAuth(String userId, String [] roleIds);

    void init(SysInitDTO sysInitDTO);
}
